// ActionScript file
/*
Copyright : LYTA SOLUTION
Autor 	  : Mário Araujo
Solução   : Sg5
Programa  : UsuarioImpl.as Implementação de Classe Usuarios
*/

import br.com.sg5.flx.event.LoginEvent;
import br.com.sg5.flx.model.Usuario;
import br.com.sg5.flx.util.RotinasUtil;
import br.com.sg5.flx.view.Principal;

import flash.display.DisplayObject;
import flash.events.Event;

import mx.binding.utils.BindingUtils;
import mx.collections.ArrayCollection;
import mx.containers.TabNavigator;
import mx.containers.TitleWindow;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.events.FlexEvent;
import mx.managers.PopUpManager;
import mx.rpc.AsyncToken;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.RemoteObject;

import org.dphibernate.rpc.HibernateManaged;
import org.dphibernate.rpc.HibernateRemoteObject;


public var UsuarioService:RemoteObject=new RemoteObject("usuarioService");

[Bindable]
public var listausuario:ArrayCollection = new ArrayCollection;			
[Bindable]
private var ativo:ArrayCollection;
[Bindable]
private var titulo:String;
[Bindable]
private var incluindo, alterando, visualizando : Boolean;

private function onApplicationComplete(event:Event):void
{
	Principal.principal.addEventListener(LoginEvent.DESLOGADO, fechar)
	init()
	abertura();
	
}

private function init():void
{
	this.ativo=new ArrayCollection();
	this.ativo.addItem("Sim");
	this.ativo.addItem("Não");
}

public function abertura():void
{
	var remoteObject:HibernateRemoteObject=new HibernateRemoteObject("dataAccessService");
	remoteObject.bufferProxyLoadRequests=true;
	HibernateManaged.defaultHibernateService=remoteObject;
	return this.getUsuario();			
}

public static function abrirPopup(target:DisplayObject):frmUsuario
{
	var janela:frmUsuario = PopUpManager.createPopUp(target, frmUsuario) as frmUsuario
	janela.width =Principal.largura;
	janela.height=Principal.altura;
	PopUpManager.centerPopUp(janela)
	return janela;
}

public function fechar(e:*=null):void{
	PopUpManager.removePopUp(this)
}

public  function parametros():ArrayCollection
{
	var tipos: ArrayCollection =new ArrayCollection();			
	tipos.addItem("Código");
	tipos.addItem("Nome");
	tipos.addItem("Login");
	return tipos;
}

public function getUsuario():void
{		
	var token:AsyncToken=UsuarioService.getUsuario();
	token.addResponder(new mx.rpc.Responder(getUsuarioSucesso, erro));
	
}

private function visualizar():void
{
	visualizando = true;
	this.title="Cadastro de Usuários   -  Visualizar";
	this.currentState= 'Edicao';
	
}
private function inclui():void
	
{
	var clearview : RotinasUtil = new RotinasUtil();
	incluindo=true;
	this.title="Cadastro de Usuários   -  Incluir";
	this.currentState= 'Edicao';
	
	clearview.clearAllData(box);
	clearview.clearAllData(TabPrincipal);
	//clearview.clearAllData(frmpirnc);

}
private function excluir():void
{
	Alert.yesLabel="Sim";
	Alert.noLabel="Não";
	Alert.show("Deseja excluir usuário: "+ Grid.selectedItem.nome +" ?","Excluir...",3,null,deletando);

}
private function deletando(event:CloseEvent):void
{
	if (event.detail== Alert.YES)
	{
		var usrD:Usuario=Grid.selectedItem as Usuario;
		if (usrD)
		{			
			var token:AsyncToken=usrD.deleteRecord();
			token.addResponder(new mx.rpc.Responder(apagoComSucesso, erro));
		}
	}
	
}
private function salvar():void
{	
	
	var token:AsyncToken;
	if(incluindo){
		var usr :Usuario = new Usuario();
		
		if(this.dpativo.selectedIndex==0){
			usr.ativo="S";
		}
		if(this.dpativo.selectedIndex==1) {
			usr.ativo="N";
		}  				
		usr.login = this.txlogin.text;
		usr.nome = this.txnome.text;
		usr.senha = this.txsenha.text;
		usr.conf_pwd = this.txconfirma.text;
		
		if(this.txtrocasenha.selected){
			usr.troca_senha = "S";	
		}
		else
		{
			usr.troca_senha = "N";
		}  
		//	usr.cargo = txcargo.text;
		//	usr.departamento = txdepartamento.text;
		//	usr.email = txemail.text;
		//usr.fone = txfone.text;
		//usr.ramal = txramal.text;
		//usr.dtval = Date(txvalidade.text);
		token=usr.save();
		token.addResponder(new mx.rpc.Responder(salvaUsuarioSucesso, erro));
		incluindo = false;
		}
	
	if(alterando){
		
	var usuario :Usuario;

	/*		if(this.dpativo.selectedIndex==0){
			usuario.ativo="S";
		}
		else if(this.dpativo.selectedIndex==1) {
			usuario.ativo="N";
		}				
		usuario.login = this.txlogin.text;
		usuario.nome = this.txnome.text;
		usuario.senha = this.txsenha.text;
		usuario.conf_pwd = this.txconfirma.text;
		if(this.txtrocasenha.selected){
			usuario.troca_senha = "S";	
		}
		else
		{
			usuario.troca_senha = "N";
		}
		//usuario.cargo = txcargo.text;
		//	usr.departamento = txdepartamento.text;
		//	usr.email = txemail.text;
		//	usr.fone = txfone.text;
		//	usr.ramal = txramal.text;
		//	usr.dtval = Date(txvalidade.text);
		*/
				
			  token=usuario.save();
		      token.addResponder(new mx.rpc.Responder(alteraUsuarioSucesso, erro));
		Alert.show("Ok");
			  
			alterando = false;
		
		}

	this.title="Cadastro de Usuários   -  Pesquisa";
	this.currentState= 'Pesquisa'
}
private function editar():void
{
	alterando=true;
	this.title="Cadastro de Usuários   -  Alterar";
	this.currentState= 'Edicao';
	
}
private function cancelar():void
{
	if (visualizando){
		visualizando = false;
	}
	else if (incluindo){
		incluindo = false;
	}
	else if(alterando){
		alterando= false;
	}
	this.title="Cadastro de Usuários   -  Pesquisa";
	this.currentState= 'Pesquisa'
}

public function getUsuarioSucesso(event:ResultEvent):void
{
	this.listausuario = event.result as ArrayCollection;
}
private function salvaUsuarioSucesso(event:ResultEvent):void{
	
	Alert.show("Usuario salvo com sucesso!","Sucesso");
	getUsuario();
}
private function alteraUsuarioSucesso(event:ResultEvent):void{
	
	Alert.show("Usuario atualizado com sucesso!","Sucesso");
	getUsuario();
}
private function apagoComSucesso(event:ResultEvent):void{
	
	Alert.show("Usuario excluido com sucesso!","Sucesso");
	getUsuario();
}
public function erro(event:FaultEvent):void
{
	Alert.show("Ocorreu o seguinte erro: " + event.fault.faultString,"Atenção");
}